///*
// * Copyright 2025 LinQingYing. and contributors.
// *
// * Licensed under the Apache License, Version 2.0 (the "License");
// * you may not use this file except in compliance with the License.
// * You may obtain a copy of the License at
// *
// *     http://www.apache.org/licenses/LICENSE-2.0
// *
// * Unless required by applicable law or agreed to in writing, software
// * distributed under the License is distributed on an "AS IS" BASIS,
// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// * See the License for the specific language governing permissions and
// * limitations under the License.
// *
// * The use of this source code is governed by the Apache License 2.0,
// * which allows users to freely use, modify, and distribute the code,
// * provided they adhere to the terms of the license.
// *
// * The software is provided "as-is", and the authors are not responsible for
// * any damages or issues arising from its use.
// *
// */
//
//package org.cangnova.cangjie.config
//
//import org.cangnova.cangjie.extensions.ProjectExtensionDescriptor
//import com.intellij.openapi.project.Project
//import com.intellij.openapi.vfs.VirtualFile
//import com.intellij.testFramework.LightVirtualFile
//
///**
// * The interface for the extensions that are used to substitute VirtualFile on the creation of CjFile, allows to preprocess a file before
// * lexing and parsing
// */
//interface PreprocessedVirtualFileFactoryExtension {
//    companion object : ProjectExtensionDescriptor<PreprocessedVirtualFileFactoryExtension>(
//        "org.cangnova.cangjie.preprocessedVirtualFileFactoryExtension",
//        PreprocessedVirtualFileFactoryExtension::class.java
//    )
//
//    fun isPassThrough(): Boolean
//
//    fun createPreprocessedFile(file: VirtualFile?): VirtualFile?
//    fun createPreprocessedLightFile(file: LightVirtualFile?): LightVirtualFile?
//}
//class PreprocessedFileCreator(val project: Project) {
//
//    private val validExts: Array<PreprocessedVirtualFileFactoryExtension> by lazy {
//        PreprocessedVirtualFileFactoryExtension.getInstances(project).filterNot { it.isPassThrough() }.toTypedArray()
//    }
//
//    fun create(file: VirtualFile): VirtualFile = validExts.firstNotNullOfOrNull { it.createPreprocessedFile(file) } ?: file
//
//    // unused now, but could be used in the IDE at some point
//    fun createLight(file: LightVirtualFile): LightVirtualFile =
//        validExts.firstNotNullOfOrNull { it.createPreprocessedLightFile(file) } ?: file
//}
